home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
MATH
/
VLN_20
/
GETSET.INC
< prev
next >
Wrap
Text File
|
1995-03-30
|
4KB
|
171 lines
{)))))))))))))))))))))))))))))))))}
function GetCount( regNo : integer ) : integer;
{)))))))))))))))))))))))))))))))))}
begin
GetCount := vlnVars[regNo]^.count;
end;
{)))))))))))))))))))))))))))))))))}
function GetBinSize ( Reg1 : integer ) : integer;
{)))))))))))))))))))))))))))))))))}
var
c, a : integer;
n : word;
begin
c := GetCount( Reg1 );
a := (c-1) * 16;
n := vlnVars[Reg1]^.tvln[c] ;
while (n>0) do
begin
n := n shr 1;
inc(a);
end;
GetBinSize := a;
end;
{)))))))))))))))))))))))))))))))))}
function GetSign( regNo : integer ) : integer;
{)))))))))))))))))))))))))))))))))}
begin
GetSign := vlnVars[regNo]^.sign;
end;
{(((((((((((((((((((((((((((((}
function FlipSign( regNo : integer ) : integer;
begin
vlnVars[ RegNo]^.Sign := - vlnVars[ RegNo]^.Sign;
FlipSign := vlnVars[ RegNo]^.Count;
end;
{))))))))))))))))))))))))))))))))))))}
{} procedure tVryLrgNo.SetRandom {} (binCnt : integer);
{))))))))))))))))))))))))))))))))))))}
var
bitsRemain, i : integer;
begin
Randomize;
bitsRemain := binCnt mod 16 ; {0 to 15}
Count := (binCnt) div 16 ; {16 bits per word }
if max<count then
begin
callError('Random too big error');
exit;
end;
sign := 1; {positive}
for i := Count+1 downto 1 do
tVLN[i] := random(32768) shl 1 + random(2);
if bitsRemain>0 then { value is 0 to 15}
begin
inc(Count);
for i := 15 downto bitsRemain do {reduce MS Byte}
tVLN[Count] := tVLN[Count] shr 1;
end;
if tVLN[Count]=0 then dec(count);
end;
{))))))))))))))))))))))))))))))}
{} procedure tVryLrgNo.SetVal {} ( cnt, sgn : integer;
{))))))))))))))))))))))))))))))} pnew : pWordArray);
var
i : integer;
Begin
if cnt >0 then
for i := 1 to cnt do
tVLN[i] := pnew^[i] ;
count := cnt;
sign := sgn;
end;
{)))))))))))))))))))))))))))))))))}
{} procedure tVryLrgNo.Clear {} ( n : integer);
{)))))))))))))))))))))))))))))))))}
var i : integer;
begin
if max<n then
begin
callError('Clear too big error');
exit;
end;
count := 0;
sign := 1;
for i := 1 to n do
tvln[i] := 0;
end;
{(((((((((((((((((((((((((((((())((}
{} procedure tVryLrgNo.__SetWord {} ( n : integer; nval : word );
{((((((((((((((((((((((((((((((((((}
var i : integer;
begin
if n > count
then
begin
if n> wksize then exit;
for i := count+1 to n-1 do
tVln[i] := 0;
count := n;
end;
tVln[n] := nval;
end;
{(((((((((((((((((((((((((((((())((}
{} function tVryLrgNo.__GetWord {} ( n : integer) : word ;
{((((((((((((((((((((((((((((((((((}
begin
if n > count
then __GetWord := (0)
else __GetWord := tVln[n];
end;
function SetWord( Reg1, pos: integer; nval : word ) : integer;
begin
vlnVars[ Reg1]^.__SetWord(pos,nval);
SetWord := vlnVars[ Reg1]^.count;
end;
function GetWord( Reg1, n : integer) : word ;
begin
GetWord := vlnVars[ Reg1]^.__GetWord(n);
end;
{(((((((((((((((((((((((((((((())((}
{} procedure tVryLrgNo.SetSmall {} (n:integer );
{((((((((((((((((((((((((((((((((((}
begin
count := 1;
sign := 1;
if n<0 then begin
sign := -1;
n:= -n;
end;
tvln[1] := n;
end;
{(((((((((((((((((((((((((((((((((}
procedure SetWkSize ( n:integer);
begin
wksize := n;
end;
{(((((((((((((((((((((((((((((((((}
function GetWkSize : integer;
begin
GetWkSize := wksize;
end;
{(((((((((((((((((((((((((((((((((}